package com.ruoyi.file.domain.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.Size;
import lombok.Data;

import java.util.List;

/**
 * 完成分片上传请求对象
 *
 * @author ruoyi
 */
@Data
@Schema(name = "CompleteMultipartRequest", description = "完成分片上传请求对象")
public class CompleteMultipartRequest {

    /** 上传ID */
    @Schema(description = "上传ID")
    @NotBlank(message = "上传ID不能为空")
    @Size(max = 1000, message = "上传ID长度不能超过1000个字符")
    private String uploadId;

    /** 存储配置ID(可选，不传则使用默认配置) */
    @Schema(description = "存储配置ID")
    private Long configId;

    /** 文件路径 */
    @Schema(description = "文件路径")
    @NotBlank(message = "文件路径不能为空")
    @Size(max = 500, message = "文件路径长度不能超过500个字符")
    private String filePath;

    /** 分片信息列表 */
    @Schema(description = "分片信息列表")
    @NotEmpty(message = "分片信息列表不能为空")
    private List<PartInfo> parts;

    /**
     * 分片信息
     */
    @Data
    @Schema(name = "PartInfo", description = "分片信息")
    public static class PartInfo {

        /** 分片号 */
        @Schema(description = "分片号")
        @NotBlank(message = "分片号不能为空")
        private Integer partNumber;

        /** ETag */
        @Schema(description = "ETag")
        @NotBlank(message = "ETag不能为空")
        private String etag;
    }
}
